package com.itlong.cloud.smartcard.dao;


import com.itlong.cloud.POJO.VO.property.CloudElevatorVO;
import com.itlong.cloud.POJO.VO.smartcard.SmartCardFaceUserInfoVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
* <desc>
*    C#人脸识别获取全量数据.
* </desc>
*
* @createDate 2019-03-18
*/
@Mapper
@Repository
public interface ISmartCardFaceDao {


    /**
     * <desc>
     *      根据项目编号获取楼栋信息
     * </desc>
     *
     * @param projectId  项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/03/18
     */
    List<String> getBuildInfoByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      通过楼栋获取用户信息
     * </desc>
     *
     * @param params
     * @return
     * @author Juguang.S
     * @createDate 2019/03/18
     */
    List<SmartCardFaceUserInfoVO> getUserInfosByBuilds(Map<String, Object> params);

    /**
     * <desc>
     *      通过楼栋获取用户信息分页总数量
     * </desc>
     *
     * @param params
     * @return
     * @author Juguang.S
     * @createDate 2019/03/18
     */
    Integer getUserInfosByBuildsCount(Map<String, Object> params);

    /**
     * <desc>
     *      根据楼栋信息获取访客人脸
     * </desc>
     *
     * @param builds
     * @param dateTime
     * @return
     * @autuhor Jiaqi.X
     * @createDate 2019/03/14
     */
    List<SmartCardFaceUserInfoVO> getVisitorFaceInfosByBuilds(@Param("builds") List<String> builds, @Param("dateTime") String dateTime);

    /**
     * <desc>
     *      获取该项目下所有的电梯设备
     * </desc>
     *
     * @param projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/03/18
     */
    List<String> getElevatorInfoByProjectId(@Param("userIdList") List<String> userIdList,@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取设备的地址信息
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Juguang.S
     * @createDate 2019/03/19
     */
    List<Map<String,Object>> getAddressByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      通过单元获取平板用户信息
     * </desc>
     *
     * @param params
     * @return
     * @author Juguang.S
     * @createDate 2019/03/19
     */
    List<SmartCardFaceUserInfoVO> getUserInfosByUnits(Map<String, Object> params);

    /**
     * <desc>
     *      通过单元获取平板用户信息总记录数
     * </desc>
     *
     * @param params
     * @return
     * @author Juguang.S
     * @createDate 2019/03/19
     */
    Integer getUserInfosByUnitsCount(Map<String, Object> params);

    /**
     * <desc>
     *      根据单元信息获取访客人脸
     * </desc>
     *
     * @param unitIds
     * @param dateTime
     * @return
     * @author Juguang.S
     * @createDate 2019/03/19
     */
    List<SmartCardFaceUserInfoVO> getVisitorFaceInfosByUnits(@Param("unitIds") String[] unitIds,@Param("dateTime") String dateTime);

    /**
     * <desc>
     *      保存
     * <desc/>
     * @param   params   bean转换层的map参数集
     * @return
     * @author Juguang.S
     * @createDate 2019/03/20
     */
    Integer save(Map<String, Object> params);

    /**
     * <desc>
     *      根据访客人脸url获取邀请该访客创建人脸的用户ID
     * <desc/>
     * @param   userId
     * @param   passId
     * @return
     * @author Juguang.S
     * @createDate 2019/03/20
     */
    String getUserIdByVFaceId(@Param("userId") String userId,@Param("passId") String passId);

    /**
     * <desc>
     *      获取该项目是否启用了人脸识别
     * <desc/>
     * @param   projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/03/20
     */
    Integer isStartFaceByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      将增量表中的该项目下的未被消费的指令改为已消费
     * <desc/>
     * @param   projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/03/20
     */
    Integer updateCommandStatus(@Param("projectId") String projectId);

    /**
     * <desc>
     *      判断该电梯是否为云电梯
     * <desc/>
     * @param   elevatorDeviceUnique 电梯设备唯一码
     * @return
     * @author Juguang.S
     * @createDate 2019/03/20
     */
    Integer isCloudElevator(@Param("elevatorDeviceUnique") String elevatorDeviceUnique);

    /**
     * <desc>
     *      删除增量数据表中的数据
     * <desc/>
     * @param projectId 项目id
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/05/16
     */
    Integer deletePullDataByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取电梯和门禁的地址集合
     * <desc/>
     * @param   deviceUnique 设备唯一码数组
     * @return
     * @author Juguang.S
     * @createDate 2019/07/01
     */
    List<Map<String,Object>> getDeviceAdress(@Param("deviceUnique") String[] deviceUnique);

    /**
     * <desc>
     *      根据楼栋ID获取单元ID
     * <desc/>
     * @param   buildId 楼栋编号
     * @return
     * @author Juguang.S
     * @createDate 2019/07/01
     */
    List<String> getUnitidInfo(@Param("buildId") String buildId);

    /**
     * <desc>
     *      根据楼栋ID或单元Id获取门禁
     * <desc/>
     * @param   buildId 楼栋编号
     * @return
     * @author Juguang.S
     * @createDate 2019/07/02
     */
    List<Map<String,Object>> getEntranceByUnitid(@Param("buildId") String buildId,@Param("unitId") String unitId);

    /**
     * <desc>
     *      根据单元Id获取电梯
     * <desc/>
     * @param   unitId 单元编号
     * @return
     * @author Juguang.S
     * @createDate 2019/07/02
     */
    List<String> getElevatorByUnitid(@Param("unitId") String unitId);

    /**
     * <desc>
     *      根据项目编号获取一卡通iot信息
     * <desc/>
     * @param   projectId
     * @return
     * @author Qiang.S
     * @createDate 2019/07/25
     */
    CloudElevatorVO getSmartCardIotInfo(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取项目有批号设备的过期时间集合。
     * <desc/>
     *
     * @param projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019-11-25
     */
    List<Map<String, String>> getDeviceCloudServiceCostEndTime(@Param("projectId") String projectId);
}
